package com.newasia.shopping.services;

import com.alibaba.fastjson.JSON;
import com.newasia.shopping.IHomeService;
import com.newasia.shopping.constant.GlobalConstants;
import com.newasia.shopping.constants.ShoppingRetCode;
import com.newasia.shopping.converter.ContentConverter;
import com.newasia.shopping.converter.ProductDectailConverter;
import com.newasia.shopping.dal.entitys.*;
import com.newasia.shopping.dal.persistence.ItemCatMapper;
import com.newasia.shopping.dal.persistence.*;
import com.newasia.shopping.dto.*;
import com.newasia.shopping.services.cache.CacheManager;
import com.newasia.shopping.utils.ExceptionProcessorUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.dubbo.config.annotation.Service;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 *主页内容
 * lyh
 */
@Slf4j
@Service
public class HomeServiceImpl implements IHomeService {

    @Autowired
    PanelMapper panelMapper;
    @Autowired
    ItemSpuMapper itemSpuMapper;
    @Autowired
    ProductDectailConverter productDectailConverter;
    @Autowired
    PanelContentMapper panelContentMapper;
    @Autowired
    ContentConverter contentConverter;
    @Autowired
    ItemCatMapper itemCatMapper;

    @Autowired
    ItemSkuMapper itemSkuMapper;

    @Autowired
    RedissonClient redissonClient;

    @Autowired
    CacheManager cacheManager;

    @Autowired
    ItemSkuPermMapper itemSkuPermMapper;

    @Override
    public HomePageResponse homepage(HomepageRequest homepageRequest) {
        log.info("Begin HomeServiceImpl.homepage");
        HomePageResponse response=new HomePageResponse();
        response.setCode(ShoppingRetCode.SUCCESS.getCode());
        response.setMsg(ShoppingRetCode.SUCCESS.getMessage());
        try {
            String json= cacheManager.checkCache(GlobalConstants.HOMEPAGE_CACHE_KEY+":"+homepageRequest.getMenuId());
            if(StringUtils.isNoneEmpty(json)){
                HomePageResponse homePageResponse = JSON.parseObject(json, HomePageResponse.class);

                response.setBanners(homePageResponse.getBanners());
                response.setHomeItems(homePageResponse.getHomeItems());
                response.setGoods(homePageResponse.getGoods());
                return response;
            }


//            PanelExample panelExample=new PanelExample();
//            PanelExample.Criteria criteria=panelExample.createCriteria();
//            criteria.andPositionEqualTo(0);
//            criteria.andStatusEqualTo(1);
//            panelExample.setOrderByClause("sort_order");
//            List<Panel> panels = panelMapper.selectByExample(panelExample);
//            Set<PanelDto> panelContentItemDtos = new HashSet<PanelDto>();
//            panels.parallelStream().forEach(panel -> {
//                List<PanelContentItem> panelContentItems = panelContentMapper.selectPanelContentAndProductWithPanelId(panel.getId());
//                PanelDto panelDto = contentConverter.panen2Dto(panel);
//                List<PanelContentItemDto> PanelContentItemDtos = contentConverter.panelContentItemsDto(panelContentItems);
//                panelDto.setPanelContentItems(PanelContentItemDtos);
//                panelContentItemDtos.add(panelDto);
//            });

            //获取轮播图
            PanelContentExample ex=new PanelContentExample();
            List<Long> list= new ArrayList<>();
            list.add((long) 7);
            list.add((long) 8);
            ex.createCriteria().andPanelIdIn(list);
           ex.setOrderByClause("sort_order asc");
            List<PanelContent> panelContents = panelContentMapper.selectByExample(ex);
            List<BannerDto> banners=new ArrayList<>();
            List<BannerDto> items=new ArrayList<>();
            for (PanelContent panelContent:panelContents) {
                BannerDto dto=new BannerDto();
                    dto.setPicUrl(panelContent.getPicUrl());
                    dto.setFullUrl(panelContent.getFullUrl());
                    dto.setType(panelContent.getType());
                    dto.setSkuId(panelContent.getSkuId());
                    if(panelContent.getPanelId().longValue()==7){
                        banners.add(dto);
                    }else  if(panelContent.getPanelId().longValue()==8){
                        items.add(dto);
                    }

            }
            log.warn(items.size()+"-------------");

            response.setBanners(banners);
            response.setHomeItems(items);


            Long menuId = homepageRequest.getMenuId();


//            ItemCatExample exx=new ItemCatExample();
//            exx.createCriteria().andParentIdEqualTo((long) 0);
//            List<ItemCat> itemCats = itemCatMapper.selectByExample(exx);
//            List<HomePageDto> data=new ArrayList();

            PanelExample eee=new PanelExample();
            eee.createCriteria().andIdNotEqualTo((long) 7).andIdNotEqualTo((long) 8).andStatusEqualTo(1);
            eee.setOrderByClause("sort_order asc,id asc");
            List<Panel> panels = panelMapper.selectByExample(eee);


            List<HomePageDto> data=new ArrayList<>();
            for (Panel p:panels) {
                HomePageDto dto=new HomePageDto();
                dto.setCatId(p.getId());
                dto.setName(p.getName());
                List<SkuDto> skus=new ArrayList<>();
                PanelContentExample ece=new PanelContentExample();
                ece.createCriteria().andPanelIdEqualTo(p.getId());

                List<PanelContent> panelContents1 = panelContentMapper.selectByExample(ece);
                for (PanelContent pp:panelContents1) {
                    SkuDto skuDto=new SkuDto();
                    skuDto.setSkuId(pp.getSkuId());

                    skuDto.setSellPoint(pp.getPicUrl2());
                    skuDto.setTitle(pp.getPicUrl());
                    ItemSkuPermExample ispExCommit=new ItemSkuPermExample();
                    ItemSku itemSku = itemSkuMapper.selectByPrimaryKey(pp.getSkuId());
                    if(itemSku.getStatus()!=1){
                        continue;
                    }
                    List<String> ii = JSON.parseArray(itemSku.getSkuImage(), String.class);
                    if(ii.size()>0){
                        skuDto.setCover(ii.get(0));
                    }else{
                        skuDto.setCover(pp.getFullUrl());
                    }
                    if(menuId!=null) {
                    ispExCommit.createCriteria().andSkuIdEqualTo(pp.getSkuId()).andMenuIdEqualTo(menuId);
                    List<ItemSkuPerm> itemSkuPermsCommit = itemSkuPermMapper.selectByExample(ispExCommit);
                    if (itemSkuPermsCommit.size() == 1) {
                        ItemSkuPerm itemSkuPerm = itemSkuPermsCommit.get(0);
                        Integer type = itemSkuPerm.getType();
                        if (type.intValue() == 0) {
                            skuDto.setPrice(itemSku.getSkuPrice().multiply(itemSkuPerm.getPercentage()));
                        } else if (type.intValue() == 1) {
                            skuDto.setPrice(itemSkuPerm.getMoney());
                        } else {
                            skuDto.setPrice(itemSku.getSkuPrice());
                        }

                    } else {
                        skuDto.setPrice(itemSku.getSkuPrice());
                    }
                }else{
                        skuDto.setPrice(itemSku.getSkuPrice());
                }
                    skus.add(skuDto);
                }

                dto.setSkus(skus);

                if(skus.size()>0){
                    data.add(dto);
                }
            }
            response.setGoods(data);

//            HomePageDto dto1=new HomePageDto();




//            dto1.setName("推荐产品");
//            dto1.setCatId((long) 0);
//            List<SkuDto> skuCommit=new ArrayList<>();
//
//            List<Long> commitData=new ArrayList<>();
//            commitData.add((long) 311);
//            commitData.add((long) 361);
//            commitData.add((long) 201);
//            commitData.add((long) 376);
//
//            for (Long skuId:commitData) {
//                ItemSku itemSkuCommit = itemSkuMapper.selectByPrimaryKey(skuId);
//                if(itemSkuCommit==null){
//                    continue;
//                }
//                ItemSpu itemSpuCommit = itemSpuMapper.selectByPrimaryKey(itemSkuCommit.getSpuId());
//                SkuDto s=new SkuDto();
//                s.setTitle(itemSpuCommit.getTitle());
//                s.setSellPoint(itemSpuCommit.getSellPoint());
//                List<String> ii = JSON.parseArray(itemSkuCommit.getSkuImage(), String.class);
//                if(ii.size()>0){
//                    s.setCover(ii.get(0));
//                }else{
//                    s.setCover(itemSpuCommit.getImage());
//                }
//
//                s.setSkuId(skuId);
//                ItemSkuPermExample ispExCommit=new ItemSkuPermExample();
//                if(menuId!=null) {
//                    ispExCommit.createCriteria().andSkuIdEqualTo(skuId).andMenuIdEqualTo(menuId);
//                    List<ItemSkuPerm> itemSkuPermsCommit = itemSkuPermMapper.selectByExample(ispExCommit);
//                    if (itemSkuPermsCommit.size() == 1) {
//                        ItemSkuPerm itemSkuPerm = itemSkuPermsCommit.get(0);
//                        Integer type = itemSkuPerm.getType();
//                        if (type.intValue() == 0) {
//                            s.setPrice(itemSkuCommit.getSkuPrice().multiply(itemSkuPerm.getPercentage()));
//                        } else if (type.intValue() == 1) {
//                            s.setPrice(itemSkuPerm.getMoney());
//                        } else {
//                            s.setPrice(itemSkuCommit.getSkuPrice());
//                        }
//
//                    } else {
//                        s.setPrice(itemSkuCommit.getSkuPrice());
//                    }
//                }else{
//                    s.setPrice(itemSkuCommit.getSkuPrice());
//                }
//                skuCommit.add(s);
//            }
//
//
//            dto1.setSkus(skuCommit);
//            data.add(dto1);
//
//            for (ItemCat item:itemCats) {
//                ItemCatExample exxx=new ItemCatExample();
//                HomePageDto dto=new HomePageDto();
//                dto.setName(item.getCatName());
//                dto.setCatId(item.getCatId());
//
//                List<SkuDto> skuDtos=new ArrayList<>();
//
//                exxx.createCriteria().andFirstIdEqualTo(item.getCatId());
//                List<ItemCat> itemCats1 = itemCatMapper.selectByExample(exxx);
//                int tempNum=0;
//
//                for (ItemCat it:itemCats1) {
//                    if(tempNum>7){
//                        break;
//                    }
//                    ItemSpuExample isEx=new ItemSpuExample();
//                    isEx.createCriteria().andCatIdEqualTo(it.getCatId()).andStatusEqualTo(1);
//                    List<ItemSpu> itemSpus = itemSpuMapper.selectByExample(isEx);
//                    for (int i = 0; i <itemSpus.size() ; i++) {
//                        if(tempNum>7){
//                            break;
//                        }
//
//                        ItemSkuExample iskEx=new ItemSkuExample();
//                        iskEx.createCriteria().andSpuIdEqualTo(itemSpus.get(i).getSpuId()).andStatusEqualTo(1);
//                        List<ItemSku> itemSkus = itemSkuMapper.selectByExampleWithBLOBs(iskEx);
//                        if(itemSkus!=null&&itemSkus.size()>0){
//                            SkuDto skuDto=new SkuDto();
//                            skuDto.setSkuId(itemSkus.get(0).getSkuId());
//
//
//
//                            if(menuId!=null){
//                                ItemSkuPermExample ispEx=new ItemSkuPermExample();
//                                ispEx.createCriteria().andSkuIdEqualTo(itemSkus.get(0).getSkuId()).andMenuIdEqualTo(menuId);
//                                List<ItemSkuPerm> itemSkuPerms = itemSkuPermMapper.selectByExample(ispEx);
//                                if(itemSkuPerms.size()==1){
//                                    ItemSkuPerm itemSkuPerm = itemSkuPerms.get(0);
//                                    Integer type = itemSkuPerm.getType();
//                                    if(type.intValue()==0){
//                                        skuDto.setPrice(itemSkus.get(0).getSkuPrice().multiply(itemSkuPerm.getPercentage()));
//                                    }else if(type.intValue()==1){
//                                        skuDto.setPrice(itemSkuPerm.getMoney());
//                                    }else{
//                                        skuDto.setPrice(itemSkus.get(0).getSkuPrice());
//                                    }
//
//                                }else{
//                                    skuDto.setPrice(itemSkus.get(0).getSkuPrice());
//                                }
//                            }else {
//                                skuDto.setPrice(itemSkus.get(0).getSkuPrice());
//                            }
//
//                            skuDto.setTitle(itemSpus.get(i).getTitle());
//                            skuDto.setSellPoint(itemSpus.get(i).getTitle());
//                            List<String> dd = JSON.parseArray(itemSkus.get(0).getSkuImage(), String.class);
////                            log.warn("-------------");
////                            log.warn(itemSkus.get(0).getSkuImage());
//                            if(dd!=null&&dd.size()>0){
//                                skuDto.setCover(dd.get(0));
//                            }else{
//                                skuDto.setCover(itemSpus.get(i).getImage());
//                            }
//
//                            skuDtos.add(skuDto);
//                        }
//                        tempNum++;
//                    }
//                }
//                if(skuDtos.size()>0){
//                    dto.setSkus(skuDtos);
//                    data.add(dto);
//                }
//            }


            cacheManager.setCache(GlobalConstants.HOMEPAGE_CACHE_KEY+":"+homepageRequest.getMenuId(),JSON.toJSONString(response),GlobalConstants.HOMEPAGE_EXPIRE_TIME);

        }catch (Exception e){
            log.error("HomeServiceImpl.homepage Occur Exception :"+e);
            ExceptionProcessorUtils.wrapperHandlerException(response,e);
            e.printStackTrace();
        }
        return response;
    }
}
